# 1、类作业，统计镰刀和斧头的数量，要使用类方法
class Tool():
    sickle_count = 0
    axe_count = 0
    def __init__(self, tool_type):
        self.tool_type = tool_type
        if tool_type == '镰刀':
            Tool.sickle_count += 1
        elif tool_type == '斧头':
            Tool.axe_count += 1

Tool1=Tool("镰刀")
Tool2=Tool("斧头")
Tool3=Tool("镰刀")
Tool4=Tool("斧头")
print(Tool.sickle_count)
print(Tool.axe_count)

# 2、做一个学生点名系统，系统里支持：存入学生、更改学生、删除学生、点到学生姓名方法
#
# 存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
# 更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
# 删除学生：删除的学生将不在展示
# 展示全部学生：可以看到全部的学生姓名
# 学生姓名：随机抽取任意一个存在的学生信息，然后打印：到！。举例： 刘闯到！
#
# 以上内容，需要连接数据库，每次的数据都需要增、删、改、查去做
import pymysql
# pip install pymysql
class DB:
    def __init__(self,host,user,password,database,cursorclass = None):
        """
        :param host: 就是阿里云服务器的ip地址
        :param user: 数据库的账号名  一般都是root
        :param password: 数据库密码
        :param database: 数据库的名字
        :param cursorclass:  返回的格式是字典格式，有key和value
        """
        self.host = host
        self.user = user
        self.password = password
        self.databases = database
        self.cursorclass = cursorclass
    def connect(self):
        self.db = pymysql.connect(host = self.host,user = self.user,
                                  password = self.password,database = self.databases,cursorclass=self.cursorclass)
        self.cursor = self.db.cursor() # todo：创建游标， 对数据库有真实的增删改的时候，需要提交数据库和游标
        # 游标，对数据库有增、删、改的时候，需要提交游标还有数据库对象，不然无效
        # 查询的时候不需要提交游标

    def close(self):
        self.cursor.close() # 关闭游标
        self.db.close() # 关闭数据库
    def select_one(self,sql): # select * from student where id = 3;   10
        self.connect() # 第一步，调用连接数据库方法，连接数据库
        try: # 尝试去执行sql
            self.cursor.execute(sql) # 使用游标对象，执行sql语句
            result = self.cursor.fetchone() # 返回一条数据 fetchone()
            self.close() # 最后关闭掉数据库，不要忘记
        except Exception as e:  # 如果sql执行错误
            print("select error %s"%e)
            result = None
        return result
    def select_all(self,sql): #  select * from student where id = 3; 10
        self.connect()
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchall()  # 返回一条数据
            self.close()
        except Exception as e:
            print("select error %s" % e)
            result = None
        return result
    def __edit(self,sql): # 相当于是一个主程序
        self.connect() # 先连接数据库
        try:
            self.cursor.execute(sql) # 使用游标对象，执行sql语句
            self.db.commit() # 数据库对象提交
            result = "数据库更新成功"
        except Exception as e:
            result = "数据库更新失败"%e
        return result
    def insert(self,sql): # insert into student(3,11,55);
        return self.__edit(sql)
    def delete(self,sql): # delete from student where id = 3;
        return self.__edit(sql)
    def update(self,sql): # update student set id = 3 where id =5;
        return self.__edit(sql)

db1 = DB(host="39.105.203.191", user="root", password="980315", database="gy", cursorclass=
pymysql.cursors.DictCursor)

print(db1.insert("insert into test values('张三',90,'沈阳','12345678911')"))
print(db1.select_all("select * from test"))
print(db1.update("update test set name = '张三',tel = '12345678911' where name = '张三'"))
print(db1.delete("delete from test where name = '张三'"))
# 3、新建学生成绩管理系统，随机生成100个 学生信息插入到数据库：
# 学生信息组成：学号、学生姓名、英语成绩、数学成绩、语文成绩、班级号（班级号有：1809A，1809B，1810A，1810B）
#
# 成绩划分为：优秀，良好，中等，及格，不及格。良好比中等好。
#
# 优秀：90—100之间（包括90）
# 良好：80-90
# 中等：70-80
# 及格：60-70
# 不合格：分数低于60分。
#
# 成绩管理系统提供以下方法：
# 《1》 查询所有英语成绩为优秀的、良好的、中等、及格和不合格的学生姓名和班级号
# 《2》 查询1809A，1809B，1810A，1810B每个班级的数学成绩，并且是降序返回
# 《3》 查询1809A，1809B，1810A，1810B每个班级的总人数，并且由大到小排序返回
# 《4》 查询英语、数学、语文成绩不合格的学生姓名和对应的班级号，按照不合格的人数，由大到小排序
#
# 4、定义一个图书管理系统类，图书可以新增、修改、删除，要求新增、修改、删除的图书，都要出现在数据库中
# 新增：图书名、作者名称、新建年月日
# 修改：图书名、作者名称、新建年月日
# 删除：图书删掉，且不在展示
# 查看：全量查询、精确查询、模糊查询需要用户传入形参来控制返回结果